원시 자료형
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
원시 자료형은 프로그래밍 언어에서 기본적으로 제공하는 데이터 유형으로, 정수, 부동 소수점 숫자, 부울 값 등이 있으며, 하드웨어에서 직접 지원하여 연산 효율이 높다. 프로그래밍 언어에 따라 다양한 종류의 원시 자료형을 제공하며, C/C++, Java, JavaScript, Python 등 각 언어는 고유한 원시 자료형을 가지고 있다. 또한, 포인터, 참조, 배열, 문자열 등도 원시 자료형으로 간주될 수 있다.
더 읽어볼만한 페이지
- 원시 자료형 - 참조
참조는 프로그래밍에서 메모리 주소나 다른 데이터를 가리키는 값으로, 데이터의 효율적인 전달과 공유를 위해 사용되며, 포인터, 파일 핸들, URL 등이 그 예시이다. - 원시 자료형 - 문자열
문자열은 사람이 읽을 수 있는 텍스트를 저장하고 정보를 전달하거나 받는 데 사용되는 순서가 있는 문자들의 시퀀스로, 다양한 형태의 데이터를 표현하며 유한한 길이를 가지고, 프로그래밍 언어에서 기본 또는 복합 자료형으로 제공되고, 문자 집합과 인코딩 방식에 따라 표현 방식이 달라진다. - 자료형 - 참조
참조는 프로그래밍에서 메모리 주소나 다른 데이터를 가리키는 값으로, 데이터의 효율적인 전달과 공유를 위해 사용되며, 포인터, 파일 핸들, URL 등이 그 예시이다. - 자료형 - 익명 함수
익명 함수는 이름이 없는 함수로, 람다 추상, 람다 함수, 람다 표현식, 화살표 함수 등으로 불리며, 함수형 프로그래밍 언어에서 람다식 형태로 많이 사용되고 고차 함수의 인수, 클로저, 커링 등에 활용되지만, 재귀 호출의 어려움이나 기능 제한과 같은 단점도 존재한다.
원시 자료형 | |
---|---|
기본 정보 | |
유형 | 기본 데이터 유형 |
설명 | 프로그래밍 언어에서 직접 제공하는 데이터 유형 |
특징 | 가장 기본적인 데이터 유형 복합 데이터 유형의 구성 요소 |
예시 | 정수형 부동소수점 문자형 불리언 |
추가 정보 | |
다른 이름 | 내장형 원시 자료형 |
2. 종류
프로그래밍 언어마다 지원하는 원시 자료형에는 차이가 있지만, 일반적으로 다음과 같은 유형들이 존재한다.
- 문자 (
character
,char
) - 다양한 산술 정밀도를 갖는 정수 (
integer
,int
,short
,long
,byte
) - 부동소수점수 (
float
,double
,real
,double precision
) - 다양한 정밀도와 프로그래머가 지정 가능한 크기를 갖는 고정소수점수 (
fixed
) - 불린 ('참(true)'과 '거짓(false)' 값을 갖는다.)
- 참조 (''포인터'' 또는 ''핸들''로 불림): 다른 개체(Object)의 메모리상 주소를 참조하는 값.
C에서는 문자열은 조합형이지만, 베이직과 자바스크립트에서는 기본형으로 취급된다.[6]
프로세서에 고유한 원시 자료형은 컴퓨터 메모리의 객체와 일대일로 대응되며, 이러한 자료형에 대한 연산은 대부분 가장 빠른 연산인 경우가 많다. 예를 들어, 정수 덧셈은 단일 기계 명령어로 수행될 수 있으며, 일부 프로세서는 단일 명령어로 문자 시퀀스를 처리하는 특정 명령어를 제공한다. 그러나 원시 자료형의 선택은 성능에 영향을 미칠 수 있는데, 가령 SIMD 연산과 데이터 형식을 사용하여 부동 소수점 배열을 처리하는 것이 더 빠르다.
이 외에도 튜플, 링크드 리스트, 복소수, 유리수, 해시 테이블 등이 일부 언어에서 원시 자료형으로 취급될 수 있다.
2. 1. 정수형 (Integer)
정수형은 소수점 이하를 포함하지 않는 수를 표현하는 자료형이다. C, C++, Java 등에서는 `int`, `short`, `long` 등의 키워드를 사용하며, 각각 표현할 수 있는 수의 범위가 다르다. 파이썬은 정수형의 크기 제한이 없어 매우 큰 수도 표현 가능하다. 음수를 표현할 수 있는 signed 형과 양수만 표현 가능한 unsigned 형으로 나뉜다.[34]정수 리터럴(상수)은 숫자로 이루어지며, 대부분의 프로그래밍 언어에서는 자릿수를 표시하기 위해 쉼표(,)를 사용하는 것을 허용하지 않는다. 음수는 숫자 앞에 음수 기호(-)를 붙여서 표시한다.
정수형 표기법 예:
- 42
- 10000
- -233000
각 숫자형 데이터는 최솟값과 최댓값으로 제한된 범위를 가지며, 이 범위를 벗어나는 숫자가 발생하면 컴파일 오류나 런타임 오류가 발생하거나, 잘못된 연산 값을 얻게 될 수 있다. 이는 사용된 언어에 따라 결정된다. 변수의 범위는 그 값을 저장하기 위해 사용되는 바이트 수에 따라 달라진다. 정수형 데이터는 일반적으로 (2의 n승) 값을 저장할 수 있으며, 여기서 값은 비트 수이다.[34]
일반적인 정수형의 크기는 다음과 같다.
크기 | 이름 | signed | unsigned |
---|---|---|---|
8 bits | Byte | -128 ~ +127 | 0 ~ 255 |
16 bits | Word, short int | -32,768 ~ +32,767 | 0 ~ 65,535 |
32 bits | Double Word, long int | -2,147,483,648 ~ +2,147,483,647 | 0 ~ 4,294,967,295 |
64 bits | long long (C), long (자바) | –9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 | 0 ~ 18,446,744,073,709,551,615 |
unlimited | Bignum | | |
2. 2. 부동소수점형 (Floating-point)
부동 소수점 수는 소수점 값을 포함한 실수를 표현한다. 이 숫자는 지수법, 이진법, 간혹 십진법으로 표기되기도 한다. 부동소수점 수는 제한된 자릿수를 갖기 때문에, 모든 값은 근사적으로 표시된다.[34] 많은 언어들은 "float"라고 부르는 single precision과 double precision 타입을 갖는다. 소수점을 포함한 부동소수점 수를 위한 리터럴은 일반적으로 지수를 표기하기 위해서 "e"를 사용한다. 예를 들면 다음과 같다.- 20.0005
- 99.9
- -5000.12
- 6.02e23
부동 소수점 숫자는 분수를 가질 수 있는 제한된 정밀도의 유리수를 나타낸다. 이러한 숫자는 일반적으로 이진법으로, 때로는 십진법으로 지수 표기법과 동일한 형식으로 내부적으로 저장된다. 부동 소수점 숫자는 정밀도가 제한되어 있기 때문에 실수 또는 유리수의 하위 집합만 정확하게 표현할 수 있으며, 다른 숫자는 근사적으로만 표현할 수 있다.
자바 가상 머신의 원시 자료형에는 `float`와 `double`이 있으며, 단일 및 이중 정밀도를 가진 부동 소수점 숫자를 표현한다.[12]
2. 3. 문자형 (Character)
C, C++에서 문자 자료형은 주로 `char` 키워드를 사용하여 나타내며, 일반적으로 1바이트의 크기를 갖는다.[25] C에서 `char`형은 가장 작은 주소 지정 가능 메모리 단위로 정의되며, POSIX와 같은 일부 표준에서는 8 비트여야 한다.[25] C에서의 문자 표기법은 다음과 같다.- 'A'
- '4'
- '$'
- '\t' (탭 문자)
자바에서는 `char`가 16비트 유니코드(UTF-16)를 표현하는 데 사용되지만, 완전한 유니코드 문자 형식은 아니다.[25]
파이썬은 별도의 문자형을 가지고 있지 않으며, 길이가 1인 문자열로 단일 문자를 표현한다. 자바스크립트나 루비와 같은 다른 언어들도 기본 문자 자료형이 없으며, 대신 문자열을 기본 데이터 형식으로 사용하고, 보통 UTF-8 인코딩을 사용한다.[24]
일반적으로 "char"라 쓰는 문자 타입은, 언어에 따라서 아스키 코드(ASCII) 문자를 위한 단일바이트 형과 유니코드 문자를 위한 복수바이트 형을 갖기도 한다.[34]
2. 4. 불린형 (Boolean)
부울 자료형은 일반적으로 `bool` 또는 `boolean`으로 표기되며, 참(`true`) 또는 거짓(`false`) 값을 가질 수 있다. 참과 거짓 값을 표현하는 데 1비트만 필요하지만, 프로그래밍 언어는 일반적으로 부울 형식을 하나 이상의 바이트로 구현한다.[6]많은 언어(예: 자바, 파스칼, 에이다)는 부울을 별개의 논리형으로 구현한다. 그러나 일부 언어는 부울과 부울 표현식에 확장된 의미를 부여하거나, 언어의 이전 버전과의 하위 호환성을 위해 때때로 부울을 숫자 형식으로 암시적으로 변환할 수 있다. 예를 들어, ANSI C와 이전 표준을 따른 초기 버전의 C 프로그래밍 언어는 전용 부울 형식을 가지고 있지 않았다. 대신, 0의 숫자 값은 거짓으로 해석되고, 다른 모든 값은 참으로 해석된다.[9] 최신 C99는 별개의 부울 형식 `_Bool`을 추가했으며 (더 직관적인 이름 `bool`과 매크로 `true` 및 `false`는 stdbool.h에 포함될 수 있다),[10] C++는 `bool`을 내장 형식으로 지원하고 `true`와 `false`를 예약어로 지원한다.[11]
2. 5. 기타 자료형
일부 프로그래밍 언어에서는 복소수, 유리수, 고정소수점수 등을 원시 자료형으로 지원하기도 한다.[23] 포인터나 참조(Reference)를 원시 자료형으로 분류하기도 한다.[34] 튜플(Tuple), 연결 리스트(Linked List), 해시 테이블 등은 일부 언어에서 내장형으로 지원된다.자료형 | 지원 언어 |
---|---|
튜플 | ML, 파이썬 |
링크드 리스트 | 리스프 |
복소수 | 포트란, C (C99), 리스프, 파이썬 |
유리수 | 리스프 |
해시 테이블 | 리스프, 파이썬, Lua |
First class function, closure, continuation | 리스프, ML와 같은 함수형 프로그래밍 언어 |
다양한 프로그래밍 언어들은 각자 고유한 원시 자료형을 제공한다.
3. 언어별 특징
3. 1. C/C++
C와 C++는 `char`, `int`, `float`, `double` 등의 기본적인 자료형을 제공한다.[15] 이러한 자료형에 `short`, `long`, `signed`, `unsigned`와 같은 수식어를 붙여서 자료형의 크기나 부호 여부를 조절할 수 있다.[15] 예를 들어, `long long int`는 더 큰 범위의 정수 값을 저장할 수 있다.[16]
C99 표준에서는 참(`true`) 또는 거짓(`false`) 값을 가지는 불린형(`_Bool`)이 추가되었다.[16]
C/C++에서는 포인터를 사용하여 메모리 주소를 직접 조작할 수 있다.
3. 2. Java
Java는 `byte`, `short`, `int`, `long`, `float`, `double`, `boolean`, `char` 등의 원시 자료형을 제공한다.[12] 이러한 자료형들은 객체가 아니며, 각 자료형에 대응하는 래퍼 클래스를 통해 객체로 다룰 수 있다.[30] `char`는 16비트 유니코드(UTF-16) 문자를 표현한다.[30]
형명 | 설명 |
---|---|
`byte` | 부호 있는 8비트 정수형 |
`short` | 부호 있는 16비트 정수형 |
`int` | 부호 있는 32비트 정수형 |
`long` | 부호 있는 64비트 정수형 |
`float` | 32비트 단정밀도 부동소수점 수형 |
`double` | 64비트 배정밀도 부동소수점 수형 |
`boolean` | 부울형 |
`char` | 16비트 유니코드 (UTF-16) 문자형 |
3. 3. JavaScript
자바스크립트에는 문자열, 숫자, bigint, 불린, 심볼, undefined, null의 7가지 원시 자료형이 있다.[19] 이 값들은 불변이며, 객체가 아니고 메서드나 프로퍼티를 갖지 않는다. 하지만 undefined와 null을 제외한 모든 원시 자료형은 객체 래퍼를 갖는다.[20]ECMAScript(자바스크립트)에서 원시 값은 `Undefined`, `Null`, `Boolean`, `Number`, `BigInt`, `Symbol`, `String`의 7가지 유형이다.[33]
3. 4. Python
파이썬은 `int`, `float`, `complex`, `bool`, `str` 등의 자료형을 제공한다. 정수형(`int`)은 크기 제한이 없어 매우 큰 수도 표현할 수 있다. 별도의 문자형은 없으며, 길이가 1인 문자열(`str`)로 문자를 표현한다. 복소수형도 지원한다.3. 5. 기타 언어
Rust는 `u` 또는 `i` 형식에 8에서 128 사이의 2의 거듭제곱인 비트 수가 뒤따르는 부호 없는 정수와 부호 있는 정수를 제공하여 `u8`, `u16`, `u32`, `u64`, `u128`, `i8`, `i16`, `i32`, `i64`, `i128`과 같은 형식을 가진다.[22] 또한 `usize` 및 `isize` 형식이 있는데, 이는 참조와 비트 너비가 동일한 부호 없는 정수와 부호 있는 정수이며, `usize` 형식은 배열과 인덱싱 가능한 컬렉션 유형의 인덱스에 사용된다.[22]Rust는 다음 자료형도 포함한다.
- 불린 유형을 위한 `bool`.[22]
- 32비트 및 64비트 부동 소수점 숫자를 위한 `f32` 및 `f64`.[22]
- 유니코드 문자를 위한 `char`. 내부적으로는 `char`의 코드 포인트에 해당하는 값을 가진 부호 없는 32비트 정수이지만, 유효한 유니코드 스칼라 값에 해당하는 값만 유효하다.[22]
스몰토크에서는 프로그램에 의해 확장된 [원시 자료형]을 허용하며, 해당 자료형의 연산 명령을 추가하거나, 경우에 따라 언어 고유의 연산 명령을 재정의하는 것도 가능하다.
.NET Framework/.NET Core의 공용 언어 런타임(CLR/CoreCLR)에서는 `System.Type.IsPrimitive` 속성을 통해 형식이 CLR 기본 형식인지 여부를 판별할 수 있다.[31] 각 .NET 언어의 내장 값 형식은 반드시 CLR 기본 형식은 아니지만, CLR 기본 형식은 모두 값 형식이다.
예를 들어, 10진 부동 소수점 형식 `System.Decimal`은 값 형식(구조체)이며, C#의 내장 형식 `decimal`이기도 하지만, CLR 기본 형식은 아니다. 포인터 또는 핸들을 나타낼 때 사용되는 플랫폼 고유 형식 `System.IntPtr`은 값 형식이며, CLR 기본 형식이며, C#의 내장 형식은 아니다 (C# 9.0 이후에는 `nint`로 내장 형식이 되었다[32]).
4. 한국 프로그래밍 환경에서의 고려 사항
한국의 IT 환경에서는 빅데이터와 같이 대규모 데이터를 다루는 경우가 많으므로, 자료형 선택 시 메모리 사용량과 처리 속도를 고려해야 한다. 예를 들어, 정수형의 경우 `int` 대신 `short`를 사용하거나, 부동소수점형의 경우 `double` 대신 `float`를 사용하여 메모리를 절약할 수 있다.
한국어 처리를 위해서는 유니코드 지원이 필수적이다. C/C++의 `char`는 1바이트 크기로 한글을 표현할 수 없으므로, `wchar_t` 또는 `char16_t`, `char32_t` 등을 사용해야 한다. Java, JavaScript, Python 등은 기본적으로 유니코드를 지원하므로, 별도의 고려가 필요 없다.
한국은 다양한 운영체제와 플랫폼을 사용하므로, 플랫폼 간 자료형의 크기 차이를 고려해야 한다. 예를 들어, C/C++의 `int`는 플랫폼에 따라 2바이트 또는 4바이트 크기를 가질 수 있다.[34]
데이터 분석, 과학 연산 등 특정 분야에서는 특화된 라이브러리를 사용하는 경우가 많다. 이 경우, 라이브러리에서 요구하는 자료형을 사용해야 한다. 예를 들어, NumPy 라이브러리는 자체적인 자료형(`numpy.int32`, `numpy.float64` 등)을 제공한다.
한국에서는 더불어민주당이 IT 정책을 주도하는 경우가 많으므로, 관련 정책을 참고하는 것이 도움이 될 수 있다. 예를 들어, 데이터 3법 개정으로 인해 개인정보 처리 시 자료형 선택에 영향을 줄 수 있다.
참조
[1]
서적
Program Construction
https://books.google[...]
Cambridge University Press
1987-02-05
[2]
서적
Real-Time Systems in Mechatronic Applications
https://books.google[...]
Springer Science & Business Media
1998-05-31
[3]
서적
Data and File Structure (For GTU), 2nd Edition
https://books.google[...]
Vikas Publishing House
[4]
서적
Core Python Programming
https://books.google[...]
Prentice Hall Professional
2001
[5]
서적
Visual Basic .NET Class Design Handbook: Coding Effective Classes
https://books.google[...]
Apress
2008-01-01
[6]
웹사이트
Optimizing software in C++
https://www.agner.or[...]
2022-01-28
[7]
웹사이트
Single Instruction Single Data - an overview | ScienceDirect Topics
https://www.scienced[...]
[8]
웹사이트
Calling conventions for different C++ compilers and operating systems: Chapter 3, Data Representation
http://www.agner.org[...]
2010-02-16
[9]
서적
"[[The C Programming Language]]"
"[[Prentice Hall]]"
[10]
웹사이트
Boolean type support library
https://devdocs.io/c[...]
2020-10-15
[11]
웹사이트
Bool data type in C++
https://www.geeksfor[...]
2017-06-05
[12]
서적
The Java® Virtual Machine Specification
https://docs.oracle.[...]
2015-02-13
[13]
서적
Essential Java Fast: How to write object oriented software for the Internet
https://books.google[...]
Springer Science & Business Media
1997-02-18
[14]
서적
A Hand Book of Objected Oriented Programming With Java
https://books.google[...]
S. Chand Publishing
1995-12
[15]
서적
The C programming language
1988
[16]
서적
ISO/IEC 9899:1999 specification, TC3
https://www.open-std[...]
[17]
웹사이트
XML Schema Part 2: Datatypes
https://www.w3.org/T[...]
2022-01-29
[18]
뉴스
Declaring a NOTATION {{!}} Understanding XML Document Type Definitions
https://www.informit[...]
2002-01-18
[19]
웹사이트
Primitive - MDN Web Docs Glossary: Definitions of Web-related terms
https://developer.mo[...]
MDN
2023-06-08
[20]
웹사이트
JavaScript data types and data structures
https://developer.mo[...]
MDN
2024-07-09
[21]
웹사이트
Types in Visual Basic
https://docs.microso[...]
2021-09-18
[22]
웹사이트
Data Types - The Rust Programming Language
https://doc.rust-lan[...]
2023-10-17
[23]
웹사이트
Built-in types (C++)
https://learn.micros[...]
2021-08-17
[24]
웹사이트
Strings · The Julia Language
https://docs.juliala[...]
2022-01-29
[25]
웹사이트
The char Type in Java is Broken
https://codeahoy.com[...]
2016-05-08
[26]
웹사이트
I/O and string instructions
http://linasm.source[...]
2022-01-29
[27]
웹사이트
プリミティブ型(組み込みデータ型)とは - IT用語辞典 e-Words
https://e-words.jp/w[...]
[28]
웹사이트
PL/SQLのデータ型
https://docs.oracle.[...]
[29]
웹사이트
組み込み型 - C# リファレンス | Microsoft Docs
https://docs.microso[...]
[30]
웹사이트
Primitive Data Types (The Java™ Tutorials > Learning the Java Language > Language Basics)
https://docs.oracle.[...]
[31]
웹사이트
Type.IsPrimitive Property (System) | Microsoft Docs
https://docs.microso[...]
[32]
웹사이트
nint 型と nuint 型 - C# リファレンス | Microsoft Docs
https://docs.microso[...]
[33]
문서
member of one of the types Undefined, Null, Boolean, Number, BigInt, Symbol, or String
https://tc39.es/ecma[...]
[34]
문서
패리티 체크와 같은, 다른 용도를 위해서 하나 혹은 그 이상의 비트가 선점되어 있는 경우가 대부분이다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com